package com.yzt.zhuju.IService.message;

import android.app.NotificationChannel;
import android.os.Build.VERSION_CODES;

import androidx.annotation.RequiresApi;
import androidx.fragment.app.FragmentActivity;

import com.alibaba.android.arouter.facade.template.IProvider;
import com.yzt.zhuju.message.ConversationInfo;

/**
 * @author matthewzhao
 *         created on: 2022/7/19 20:34
 *         description: 消息相关service
 */
public interface IMessageService extends IProvider {

    /**
     * 登录
     */
    void login();

    /**
     * IM退出登录
     */
    void logout();

    /**
     * 更新IM系统的用户信息
     *
     * @param userId 用户id
     * @param userName 用户昵称
     * @param avatar 头像
     * @param extraJsonStr 额外的扩展信息，json格式
     */
    void updateUserInfo(String userId, String userName, String avatar, String extraJsonStr);

    /**
     * 是否显示消息详情（通知）
     */
    void setMessageContentShowStatus(boolean open, MessageCallback callback);

    /**
     * 是否打开通知声音
     */
    void setMessageSound(boolean open);

    /**
     * 设置消息免打扰时间段
     * @param startTime 开始时间点，格式"hh：mm：ss"
     * @param spanMinutes 免打扰持续时间
     */
    void setNotificationQuietHours(String startTime, int spanMinutes, MessageCallback callback);

    /**
     * 取消免打扰时间段
     */
    void removeNotificationQuietHours(MessageCallback callback);

    /**
     * 获取IM的通知channel
     */
    @RequiresApi(api = VERSION_CODES.O)
    NotificationChannel getMessageNotificationChannel();

    /**
     * 发送文字消息
     *
     * @param targetUid 接收消息者uid
     * @param messageText 消息信息
     */
    void sendTextMessage(String targetUid, String messageText);

    /**
     * 发送文字消息
     *
     * @param targetUid 接收消息者uid
     * @param messageText 消息信息
     */
    void sendTextMessage(String targetUid, String messageText, MessageCallback callback);
    /**
     * 给某个人送礼消息
     *
     * @param targetUid 接收消息者uid
     */
    void sendGiftMessageToOne(String targetUid, String messageText, String giftIcon);

    /**
     * 清空消息列表(但不删除聊天记录)
     */
    void deleteConversationList(MessageCallback callback);

    /**
     * 清空聊天记录
     */
    void clearHistory(MessageCallback callback);

    /**
     * 添加未读消息数量变化监听
     */
    void addUnReadCountChangeObserver(UnReadMessageCountChangeObserver observer);

    /**
     * 移除未读消息数量变化监听
     */
    void removeUnReadCountChangeObserver(UnReadMessageCountChangeObserver observer);

    /**
     * 获取总未读消息数
     */
    void getTotalUnreadMessageCount(UnreadCountCallback callback);

    /**
     * 获取未读会话数
     */
    int getUnreadConversationCount();

    /**
     * 获取首个未读会话信息
     */
    ConversationInfo getFirstUnreadConversation();

    /**
     * 展示聊天消息页面弹框
     */
    void showMessageListDialog(FragmentActivity activity);

    /**
     * dismiss聊天消息页面弹框
     */
    void dismissMessageListDialog(boolean destroy);

    /**
     * 开启顶部悬浮消息通知
     */
    void registerFloatMessage();

    /**
     * 关闭顶部悬浮消息通知
     */
    void unregisterFloatMessage();
}
